#ifndef IINPUT_H
#define IINPUT_H

#include <utils/Maths.h>

// Purpose: Provides access to low-level user-input

//TODO: Could make this a private member of Engine to hide it from the rest
//      of the engine and then have a separate (and Engine-public) high-level input class.

class IInput
{
	
public:
	
	typedef unsigned char Key;
	enum { MAX_KEYS = 256 };
	
public:
    
    IInput()          {}
    virtual ~IInput() {}
	
public:
	
    //Gathers all of the input data
	virtual void update() = 0;
	    
	//Mouse movement
	virtual Vector getMousePos() = 0;
	virtual Vector getMouseMoveVector() = 0;
	virtual Scalar getMouseMoveAngle() = 0;
	virtual Scalar getMouseMoveDistance() = 0;
	virtual bool   isMouseMoved() = 0;
    
	//Key presses (includes mouse clicks)
	virtual bool   getKeyState(Key k) = 0;
	virtual bool   getKeyDown(Key k) = 0;
	virtual bool   getKeyUp(Key k) = 0;
    
};

#endif //IINPUT_H

